#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int Maxn=1002,Mod=147744151;
int n,m,p,a[Maxn][Maxn],Q,cnt; 
int sum[Maxn][Maxn][15];
ll prd[Maxn][Maxn],ans;
vector<pair<int,int> >divs;
inline int ksm(ll a,int b,int mod){
	ll z=1;
	while(b){
		if(b&1) z=z*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return z%mod;
}
inline void exgcd(int a,int b,int &x,int &y){
	if(!b){
		x=1,y=0;
		return ;
	}
	exgcd(b,a%b,x,y);
	int temp=x;x=y;y=temp-y*(a/b);
}
inline int Getinv(int typ,int mod){
	int x,y;
	exgcd(typ,mod,x,y);
	x=(x%mod+mod)%mod;
	return x;
}
inline int Getsum(int xp1,int yp1,int xp2,int yp2,int t){
	return sum[xp2][yp2][t]-sum[xp1-1][yp2][t]-sum[xp2][yp1-1][t]+sum[xp1-1][yp1-1][t];
}
inline ll Getprd(int xp1,int yp1,int xp2,int yp2){
	return prd[xp2][yp2]*Getinv(prd[xp1-1][yp2],p)%p*Getinv(prd[xp2][yp1-1],p)%p*prd[xp1-1][yp1-1]%p;
}
int main(){
	freopen("tsuki.in","r",stdin);
	freopen("tsuki.out","w",stdout);
	scanf("%d%d%d",&n,&m,&p);
	int p1=p;
	for(int i=2;i*i<=p1;i++)
		if(!(p1%i)){
			int c=0;
			while(!(p1%i)) ++c,p1/=i;
			divs.push_back(make_pair(i,c));
		}
	if(p1!=1) divs.push_back(make_pair(p1,1));
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			scanf("%d",&a[i][j]);
	for(int t=0;t<divs.size();t++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				if(a[i][j]%divs[t].first==0){
					int c=0,tp=a[i][j];
					while(!(tp%divs[t].first)) ++c,tp/=divs[t].first;
					sum[i][j][t]=c;
					prd[i][j]=1;
				}
				else if(prd[i][j]!=1) prd[i][j]=a[i][j];
	for(int i=0;i<=n;i++)
		for(int j=0;j<=n;j++)
			if(!prd[i][j])
				prd[i][j]=1;
	/*
	cout<<"Case\n";
	for(int i=1;i<=n;i++,puts(" "))
		for(int j=1;j<=m;j++)
			cout<<prd[i][j]<<" ";
		test for prod		
	*/	
	
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			prd[i][j]=prd[i][j]*prd[i-1][j]%p;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			prd[i][j]=prd[i][j]*prd[i][j-1]%p;
	for(int t=0;t<divs.size();t++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				sum[i][j][t]=(sum[i][j][t]+sum[i-1][j][t]+sum[i][j-1][t]-sum[i-1][j-1][t]);
				
	/*
	for(int t=0;t<divs.size();t++){
		cout<<"Case #:"<<divs[t].first<<"\n";
			for(ll i=1;i<=n;i++,puts(""))
				for(int j=1;j<=m;j++){
					cout<<sum[i][j][t]<<" ";
				}
	}
		test for sum
	*/
	/*
	cout<<"Check\n";
	for(int i=1;i<=n;i++,puts(" "))
		for(int j=1;j<=m;j++)
			cout<<prd[i][j]<<" ";
		test for prd
	*/
	scanf("%d",&Q);
	while(Q--){
		int xp1,xp2,yp1,yp2;
		scanf("%d%d%d%d",&xp1,&yp1,&xp2,&yp2);
		ll prdmat=Getprd(xp1,yp1,xp2,yp2);
		ll allprd=1;
		bool flg=0;
		for(int j=0;j<divs.size();j++){
			int summat=Getsum(xp1,yp1,xp2,yp2,j);
			//cout<<"window "<<divs[j].first<<" "<<summat<<" "<<divs[j].second<<endl;
			if(summat<divs[j].second) flg=1;
			allprd=allprd*ksm((ll)divs[j].first,summat,p)%p;
		}
		allprd=flg*allprd*prdmat%p;
		cnt++;
		ans=ans+(allprd^cnt);
		ans%=Mod;
	}
	printf("%lld",ans);
	return 0;
}
/*
5 5 14
1 11 5 11 1
3 9 11 2 2
13 1 9 7 13
5 3 5 3 11
5 9 9 13 2
5
1 3 5 4
5 4 5 4
5 1 5 5
1 2 3 4
3 1 3 4
*/
